<?php
App::import('Model', 'related_images.RelatedImage', 'related_images.I18nRelatedImage');
class ManageController extends AppController {
	var $name = 'Manage';
	var $helpers = array('Html','Javascript','Form');
	var $uses = array();
	var $components = array('MultiFileUpload');
	var $related_image_configs = array();
	var $layout = 'ajax';
	/**
	 @var $model
	 @brief Thông tin về model, được sử dụng trong trường hợp override thông tin của danh mục
	 */
	var $models = array(
		//'Category'	=>	array(
		//	'plugin'	=>	'categories',
		//	'name'		=>	'Category'
		//),
		'Page'		=>	array(
			'plugin'	=>	'related_images',
			'name'		=>	'RelatedImage'
		)
	);
	function beforeFilter() {
		parent::beforeFilter();
		foreach ($this->models as $key => $item) {
			App::import('Model', $item['plugin'].".".$item['name']);
			$this->loadModel($item['name']);
		}
		
		$this->set('models', $this->models);
		$this->configs = $this->RelatedImage->loadConfig();
		
		$loaded = Configure::load(base64_decode($this->params['named']['configFile']));
		$this->configs['module']['RelatedImages'] = Configure::read('RelatedImages');
        $this->configs['module']['RelatedImage'] = $this->configs['module']['RelatedImages'];
        //debug($this->configs);
		//exit("Error: ".$loaded);
		if (!is_array($this->configs['module']['RelatedImages'])) {
			exit(__("Error: Không thể đọc thông số của hình ảnh liên quan"));
		}
		//debug($this->configs['module']); exit();
		$this->set('configs', $this->configs);
        
        header("Content-type: text/html; charset=utf-8");
	}
	
	/**
	 * Phương thức dùng đê uploda một file hình bằng ajax
	 * @return unknown_type
	 */
	function ajax_upload_image() {
		//debug($_FILES);exit;
		Configure::write('debug', 0);
		
		// Check foreign-key id
		$id = -1;
		if (isset($this->params['named']['id'])) {
			$id = $this->params['named']['id'];
		} else {
			exit("Error: ".__("Sai khóa ngoại", true));
		}
		
		// Check title
		$title = "";
		if (isset($this->params['named']['title']) && trim($this->params['named']['title']) != "") {
			$title = $this->params['named']['title'];
		} else {
			exit("Error: ".__("Bạn vui lòng nhập tiêu đề", true));
		}
		
		
		
		// Model Name
		$model = '';
		if (isset($this->params['named']['model']) && trim($this->params['named']['model']) != "") {
			$model = $this->params['named']['model'];
		} else {
			exit("Error: ".__("Bạn vui lòng cung cấp đúng tên Model", true));
		}
		
		
		// Upload Image
		$image = "";
		
		$this->MultiFileUpload->encode_filename = false;
		$this->MultiFileUpload->uploadpath = $this->configs['module']['RelatedImages']['image']['path'];
		
		$imgRet = array();
		try {
            //debug($_FILES);exit;
			$imgRet = $this->MultiFileUpload->upload();
		} catch (Exception $ex) {
			exit('Error: '.$ex->getMessage());
		}
		if (count($imgRet) > 0) {
			// assign name to image field.
			App::import('Vendor','images/my_image'); 
			$thumbnail_dir = $this->configs['module']['RelatedImages']['thumbnail']['path'];
			if (!is_dir($thumbnail_dir)) {
				mkdir($thumbnail_dir);
			}
			
			// Create Image Object
			$my_image = new my_image($this->MultiFileUpload->uploadpath.$imgRet['image']['image']);

            if (isset($this->configs['module']['RelatedImages']['image']) && $this->configs['module']['RelatedImages']['image']['autoResize']) {
				// resize image
				$my_image->thumbnail(
					$this->configs['module']['RelatedImages']['image']['width'],
					$this->configs['module']['RelatedImages']['image']['height'],
					$this->configs['module']['RelatedImages']['image']['percent']
				);
				$my_image->copyTo($this->MultiFileUpload->uploadpath.$imgRet['image']['image']);
			}

			// Thumbnail the image
			$my_image->thumbnail(
				$this->configs['module']['RelatedImages']['thumbnail']['width'],
				$this->configs['module']['RelatedImages']['thumbnail']['height'],
				$this->configs['module']['RelatedImages']['thumbnail']['percent']
			);
			
			// Get File Extension & Generate Thumbnail Name
			$ext = strrchr($imgRet['image']['image'], ".");
			$pos = strrpos($imgRet['image']['image'], ".");
			$filename = substr($imgRet['image']['image'],0,$pos);
			$thumbnail_name = $filename."_thumbnail".$ext;
			$my_image->copyTo($thumbnail_dir.$thumbnail_name);
			
			$image = $imgRet['image']['image'];
		} else {
			exit('Error: '.__("Không có hình ảnh nào được tải lên.", true));
		}
		
		// If image has been uploaded and title is not null, save it to database
		$description = "";
		if (isset($this->params['named']['description'])) {
			$description = $this->params['named']['description'];
		}
		
		$this->data = array(
			$this->models['Page']['name']	=>	array(
				'image_name'				=>	$image,
				'size'						=>	$imgRet['image']['size'],
				'original_name'				=>	$_FILES['FileField']['name']['image'],
				'content_type'				=>	$this->MultiFileUpload->getContentType($imgRet['image']['extension']),
				'model'						=>	$model,
				'foreign_key'				=>	$id,
				'image_title'				=>	urldecode($title),
				'description'				=>	urldecode($description)
			)
		);
		
		$this->{$this->models['Page']['name']}->create($this->data);
		if ($this->{$this->models['Page']['name']}->save($this->data)) {
			// Set data into image info
			$image_info = $this->data[$this->models['Page']['name']];
			$image_info['id']	=	$this->{$this->models['Page']['name']}->id;
			$this->set('image', $image_info);
			$this->render('image_block');
		} else {
			// Delete Image first
			$this->{$this->models['Page']['name']}->delete_image($image, $this->configs['module']);
			
			// Display Error Message
			exit("Error: ".__("Không thể lưu thông tin", true));
		}
	}
	
	/**
	 * Phương thức dùng để xóa hình ảnh khỏi ổ cứng và database
	 * @return unknown_type
	 */
	function ajax_delete_image() {
		// Khởi tạo mảng json
		$json = array(
			'error'		=>	0,
			'message'	=>	__("Mặc định", true),
			'data'		=>	array()
		);
		
		if (!(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {
			$json['error'] = 1;
			$json['message'] = __("Yêu cầu của bạn không hợp lệ", true);
			
			echo json_encode($json);
			exit();
		} else {
			Configure::write('debug', 0);
		}
		
		// Kiểm tra ID của image để xóa
		if (!isset($this->params['named']['image_id'])) {
			$json['error'] = 1;
			$json['message'] = __("Sai mã hình ảnh", true);
			
			echo json_encode($json);
			exit();
		} else {
			$image_id = $this->params['named']['image_id'];
		}
		
		// Xóa record, trả về tên anh đã xóa để tiếp tục xóa file ảnh 
		$oldImage = $this->{$this->models['Page']['name']}->deleteItem($image_id);
        //if($oldImage != "") $oldImage $this->{$this->models['Page']['name']}->delete($image_id);
        // Xóa record
        //$oldImage = $this->{$this->models['Page']['name']}->delete($image_id);
		
        // Xóa file trên Harddisk
        $this->{$this->models['Page']['name']}->delete_image($oldImage, $this->configs['module']);
		
		$json['message'] = __("Hình ảnh đã được xóa thành công!", true);
		
		echo json_encode($json);
		exit;
	}
	
	function edit() {
		Configure::write('debug', 0);
		$id = $this->params['named']['image_id'];
		
		if (!isset($this->params['named']['title'])) {
			$this->data = $this->{$this->models['Page']['name']}->read(null, $id);
		} else {
			// Check title
			$title = "";
			if (isset($this->params['named']['title']) && trim($this->params['named']['title']) != "") {
				$title = $this->params['named']['title'];
			} else {
				exit("Error: ".__("Bạn vui lòng nhập tiêu đề", true));
			}
			
			// Upload Image
			$image = "";
			$oldImage = "";
			$this->MultiFileUpload->encode_filename = false;
			$this->MultiFileUpload->uploadpath = $this->configs['module']['RelatedImages']['image']['path'];
			
			$imgRet = array();
			try {
				$imgRet = $this->MultiFileUpload->upload();
			} catch (Exception $ex) {
				exit('Error: '.$ex->getMessage());
			}
			
			// Nếu có image được upload
			if (count($imgRet) > 0) {
				// assign name to image field.
				App::import('Vendor','images/my_image'); 
				$thumbnail_dir = $this->configs['module']['RelatedImages']['thumbnail']['path'];
				if (!is_dir($thumbnail_dir)) {
					mkdir($thumbnail_dir);
				}
				
				// Create Image Object
				$my_image = new my_image($this->MultiFileUpload->uploadpath.$imgRet['image']['image']);

                if (isset($this->configs['module']['RelatedImages']['image']) && $this->configs['module']['RelatedImages']['image']['autoResize']) {
    				// resize image
    				$my_image->thumbnail(
    					$this->configs['module']['RelatedImages']['image']['width'],
    					$this->configs['module']['RelatedImages']['image']['height'],
    					$this->configs['module']['RelatedImages']['image']['percent']
    				);
    				$my_image->copyTo($this->MultiFileUpload->uploadpath.$imgRet['image']['image']);
    			}

				// Thumbnail the image
				$my_image->thumbnail(
					$this->configs['module']['RelatedImages']['thumbnail']['width'],
					$this->configs['module']['RelatedImages']['thumbnail']['height'],
					$this->configs['module']['RelatedImages']['thumbnail']['percent']
				);
				
				// Get File Extension & Generate Thumbnail Name
				$ext = strrchr($imgRet['image']['image'], ".");
				$pos = strrpos($imgRet['image']['image'], ".");
				$filename = substr($imgRet['image']['image'],0,$pos);
				$thumbnail_name = $filename."_thumbnail".$ext;
				$my_image->copyTo($thumbnail_dir.$thumbnail_name);
				
				$image = $imgRet['image']['image'];
				
				// Load old image
				$data[$this->models['Page']['name']]['id'] = $id;
				$this->{$this->models['Page']['name']}->set($data);
				$oldImage = $this->{$this->models['Page']['name']}->field('image_name');
			}
			
			// If image has been uploaded and title is not null, save it to database
			$description = "";
			if (isset($this->params['named']['description'])) {
				$description = $this->params['named']['description'];
			}
			
			// create data
			$this->data = array(
				$this->models['Page']['name']	=>	array(
					'id'						=>	$id,
					'image_title'				=>	urldecode($title),
					'description'				=>	urldecode($description)
				)
			);
			if ($image != "") {
				$this->data[$this->models['Page']['name']]['image_name'] = $image;
				$this->data[$this->models['Page']['name']]['size'] = $imgRet['image']['size'];
				$this->data[$this->models['Page']['name']]['original_name'] = $_FILES['FileField']['name']['image'];
				$this->data[$this->models['Page']['name']]['content_type'] = $this->MultiFileUpload->getContentType($imgRet['image']['extension']);
			}
			
			// Set the data to RelatedImage Object
			$this->{$this->models['Page']['name']}->set($this->data);
			
			// Kiểm tra 
			$invalidFields = $this->{$this->models['Page']['name']}->invalidFields();
			if (count($invalidFields)) {
				exit(__('Lỗi: Dữ liệu không hợp lệ. Bạn vui lòng kiểm tra lại dữ liệu nhập', true));
			} else {
				if ($this->{$this->models['Page']['name']}->save($this->data)) {
					// Set data into image info
					$related_image = $this->{$this->models['Page']['name']}->read(null, $id); 
					$image_info = $related_image[$this->models['Page']['name']];
					
					$this->set('image', $image_info);
					$this->render('image_block');
					
					// Delete Old Image
					$this->{$this->models['Page']['name']}->delete_image($oldImage, $this->configs['module']);
				} else {
					// Delete Image first
					$this->{$this->models['Page']['name']}->delete_image($image, $this->configs['module']);
					
					// Display Error Message
					exit("Error: ".__("Không thể cập nhật thông tin hình ảnh", true));
				}
			}
		}
	}
}
?>